package com.qike.yuandongguoji.service;



import com.mashape.unirest.http.exceptions.UnirestException;
import com.qike.yuandongguoji.dto.*;
import com.qike.yuandongguoji.pojo.TemplateData;
import com.qike.yuandongguoji.vo.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;

public interface WeChatService {

    /**
     * 微信登录
     * @param code
     * @return
     */
    LoginVo weChatLogin(String code) throws Exception;


    Object getPhoneNumber(PhoneNumberDto phoneNumberDto) throws Exception;

    /**
     * 获取用户信息
     * @param getUidDto
     * @return
     */
    GetUidVo getUid(GetUidDto getUidDto);

    /**
     * 发送模板消息
     * @param openId
     * @param templateId
     * @param page
     * @param map
     */
      void subscribeMessage(String openId, String templateId, String page, Map<String, TemplateData> map);

    /**
     * 微信差旅行程
     * @param getUidDto
     * @return
     */
    WechatOutListVo outList(OutListWeChatDto getUidDto);

    /**
     * 发起请假审批
     * @param addLeavingDto
     */
    void addLeaving(AddLeavingDto addLeavingDto) throws Exception;

    /**
     * 我发起的请假列表
     * @param getUidDto
     * @return
     */
    MyLeavingListVo myLeavingList(OutListWeChatDto getUidDto);

    /**
     * 待我审批列表
     * @param getUidDto
     * @return
     */
    WaitMyLeavingListVo waitMyLeavingList(OutListWeChatDto getUidDto);

    /**
     * 审批
     * @param approvalDto
     */
    void approval(ApprovalDto approvalDto) throws Exception;

    /**
     * 发送差旅通知
     * @param outNoticeDto
     */
    void outNotice(OutNoticeDto outNoticeDto) throws Exception;

    /**
     * 发送用车通知
     * @param carNoticeDto
     */
    void carNotice(CarNoticeDto carNoticeDto) throws Exception;

    /**
     * 参会通知
     * @param joinMeetingDto
     */
    void joinMeeting(JoinMeetingDto joinMeetingDto) throws Exception;

    /**
     * 会议取消通知
     * @param joinMeetingDto
     */
    void cancelMeeting(JoinMeetingDto joinMeetingDto) throws UnirestException, Exception;

    /**
     * 审批通知
     * @param approvalNoticeDto
     */
    void approvalNotice(ApprovalNoticeDto approvalNoticeDto) throws Exception;

    /**
     * 审批结果通知
     * @param approvalNoticeDto
     */
    void approvalResultNotice(ApprovalResultNoticeDto approvalNoticeDto) throws Exception;

    /**
     * 请假撤回
     * @param delLeavingDto
     */
    void delLeaving(DelLeavingDto delLeavingDto);

    /**
     * 获取用户状态
     * @param getUidDto
     * @return
     */
    Boolean getUserStatus(GetUidDto getUidDto);

    void testNotice();
}
